﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace iParse
{
    public class Parser
    {
        public delegate void ParserEventHandler(object sender, ParserEventArgs e);
        public event ParserEventHandler end;

        protected void endWork(string result)
        {
            end(this, new ParserEventArgs(result));
        }
        /// <summary>
        /// Метод алгоритма поиска переменных определенного типа, объектов определенного класса
        /// </summary>
        /// <param name="Входной текст"></param>
        /// <param name="Ключевое слово"></param>
        /// <returns></returns>
        public void Search(string stringsearch, string search)//входными параметрами метода являются строка с кодом программы и строка поиска
        {
            string[] ss = stringsearch.Split(';');//разбиваем строку с кодом программы на массив строк по ";"
            string result = "";//строковая переменная, в которую записываются названия найденных переменных и объектов
            for (int i = 0; i < ss.Length - 1; i++)//цикл по строкам массива
            {
                char[] chararr = ss[i].ToCharArray();//каждую строку преобразовываем в массив символов
                string s = "", checkstring = "";//проверочная строка
                for (int m = 0; m < chararr.Length - search.Length; m++)//цикл по массиву символов
                {
                    s = "";
                    for (int j = 0; j < search.Length; j++)
                    {
                        s += chararr[m + j].ToString();
                    }
                    if (s == search && chararr[m + search.Length] == ' ')
                    {
                        for (int k = m + search.Length + 1; k < chararr.Length; k++)
                        {
                            checkstring += chararr[k].ToString();
                            /*if (chararr[k] == '{')
                            {
                                for (int del = k - 1; del >= 0; del--)
                                    checkstring = checkstring.Remove(del);
                                break;
                            }*/
                        }

                        string[] variables = checkstring.Split(',');
                        for (int nvariables = 0; nvariables < variables.Length; nvariables++)
                        {
                            string str = variables[nvariables];
                            /*string[] check = str.Split(' ');
                            for (int k = 0; k < check.Length; k++)
                            {
                                if (check[k]==search)
                            }*/
                            for (int varlength = 0; varlength < str.Length; varlength++)
                            {
                                if (str[varlength] != ' ' && str[varlength] != '=') { result += str[varlength].ToString(); if (varlength == str.Length - 1) result += ", "; continue; }
                                if (str[varlength] == ' ') continue;
                                if (varlength == str.Length - 1) { result += ", "; break; }
                                if (str[varlength] == '=')
                                {
                                    result += ", ";
                                    break;
                                }
                            }
                        }
                    }
                    else continue;
                }
                //continue;
            }
            for (int count = result.Length - 1; count > 0; count--)
            {
                if (result[count] == ' ' || result[count] == ',')
                    result = result.Remove(count);
                else break;
            }
            endWork(result);
        }
        
    }
}
